package com.iot.core.redis;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @ClassName IJedisClient
 * @Description
 * @Author DuWei
 * @Date 2019/1/24 13:37
 **/
interface IJedisClient {

    /**
     * 获取缓存
     *
     * @param key 键
     * @return 值
     */

    String get(String key);

    byte[] get(byte[] key);

    /**
     * 获取缓存
     *
     * @param key 键
     * @return 值
     */
    Object getObject(String key);

    /**
     * 设置缓存
     *
     * @param key          键
     * @param value        值
     * @param cacheSeconds 超时时间，0为不超时
     * @return
     */
    String set(String key, String value, int cacheSeconds);

    byte[] set(byte[] key, byte[] value);

    byte[] set(byte[] key, byte[] value, int expire);

    void del(byte[] key);

    Set<byte[]> keys(String pattern);

    /**
     * 设置缓存
     *
     * @param key          键
     * @param value        值
     * @param cacheSeconds 超时时间，0为不超时
     * @return
     */
    String setObject(String key, Object value, int cacheSeconds);

    /**
     * 获取List缓存
     *
     * @param key 键
     * @return 值
     */
    List<String> getList(String key);

    /**
     * 获取List缓存
     *
     * @param key 键
     * @return 值
     */
    List<Object> getObjectList(String key);

    /**
     * 设置List缓存
     *
     * @param key          键
     * @param value        值
     * @param cacheSeconds 超时时间，0为不超时
     * @return
     */
    long setList(String key, List<String> value, int cacheSeconds);

    /**
     * 设置List缓存
     *
     * @param key          键
     * @param value        值
     * @param cacheSeconds 超时时间，0为不超时
     * @return
     */
    long setObjectList(String key, List<Object> value, int cacheSeconds);

    /**
     * 向List缓存中添加值
     *
     * @param key   键
     * @param value 值
     * @return
     */
    long listAdd(String key, String... value);

    /**
     * 向List缓存中添加值
     *
     * @param key   键
     * @param value 值
     * @return
     */
    long listObjectAdd(String key, Object... value);

    /**
     * 获取缓存
     *
     * @param key 键
     * @return 值
     */
    Set<String> getSet(String key);

    /**
     * 获取缓存
     *
     * @param key 键
     * @return 值
     */
    Set<Object> getObjectSet(String key);

    /**
     * 设置Set缓存
     *
     * @param key          键
     * @param value        值
     * @param cacheSeconds 超时时间，0为不超时
     * @return
     */
    long setSet(String key, Set<String> value, int cacheSeconds);

    /**
     * 设置Set缓存
     *
     * @param key          键
     * @param value        值
     * @param cacheSeconds 超时时间，0为不超时
     * @return
     */
    long setObjectSet(String key, Set<Object> value, int cacheSeconds);

    /**
     * 向Set缓存中添加值
     *
     * @param key   键
     * @param value 值
     * @return
     */
    long setSetAdd(String key, String... value);

    /**
     * 删除 namespace Set中的元素
     *
     * @param namespace Set的命名空间
     * @param value     Set中的元素
     * @return
     */
    long removeSetObject(String namespace, String... value);

    /**
     *  namespace Set中是否包含元素value
     * @param namespace
     * @param value
     * @return
     */
    boolean containsSetObject(String namespace, String value);

    /**
     * namespace Map中是否包含元素value
     * @param namespace
     * @param value
     * @return
     */
    boolean containsMapObject(String namespace, String value);

    /**
     * 向Set缓存中添加值
     *
     * @param key   键
     * @param value 值
     * @return
     */
    long setSetObjectAdd(String key, Object... value);

    /**
     * 获取Map缓存
     *
     * @param key 键
     * @return 值
     */
    Map<String, String> getMap(String key);

    /**
     * 获取Map缓存
     *
     * @param key 键
     * @return 值
     */
    Map<String, Object> getObjectMap(String key);

    /**
     * 获取ObjectMap缓存对应健的值
     * @param namespace
     * @param key
     * @return
     */
    Object getObjectMapValue(String namespace, String key);

    /**
     * 设置Map缓存
     *
     * @param key          键
     * @param value        值
     * @param cacheSeconds 超时时间，0为不超时
     * @return
     */
    String setMap(String key, Map<String, String> value, int cacheSeconds);

    /**
     * 设置Map缓存
     *
     * @param key          键
     * @param value        值
     * @param cacheSeconds 超时时间，0为不超时
     * @return
     */
    String setObjectMap(String key, Map<String, Object> value,
                        int cacheSeconds);

    /**
     * 向Map缓存中添加值
     *
     * @param namespace Map的命名空间
     * @param key       键
     * @param value     值
     * @return
     */
    Long mapPut(String namespace, String key, String value);

    /**
     * map存放整型增加值
     * @param namespace
     * @param key
     * @param value 增加的值
     */
    void mapNumAdd(String namespace, String key, Integer value);

    /**
     * 从Map缓存中取值
     * @param namespace
     * @param key
     * @return
     */
    String mapGet(String namespace, String key);

    /**
     * 向Map缓存中添加值
     *
     * @param key   键
     * @param value 值
     * @return
     */
    String mapObjectPut(String key, Map<String, Object> value);

    /**
     * 向Map缓存中添加值
     *
     * @param key   键
     * @param value 值
     * @return
     */
    String mapObjectPut(String namespace, String key, Object value);

    /**
     * 向Object Map中取值
     * @param namespace
     * @param key
     * @return
     */
    Object mapObjectGet(String namespace, String key);

    /**
     * 移除Map缓存中的值
     *
     * @param key    键
     * @param mapKey 值
     * @return
     */
    long mapRemove(String key, String mapKey);

    /**
     * 移除Map值为指定值的项目
     * @param namespace
     * @param mapValue
     * @return
     */
    long mapRemoveByValue(String namespace, String mapValue);

    /**
     * 移除Map缓存中的值
     *
     * @param key    键
     * @param mapKey 值
     * @return
     */
    long mapObjectRemove(String key, String mapKey);

    /**
     * 判断Map缓存中的Key是否存在
     *
     * @param key    键
     * @param mapKey 值
     * @return
     */
    boolean mapExists(String key, String mapKey);

    /**
     * 判断Map缓存中的Key是否存在
     *
     * @param key    键
     * @param mapKey 值
     * @return
     */
    boolean mapObjectExists(String key, String mapKey);

    /**
     * 删除缓存
     *
     * @param key 键
     * @return
     */
    long del(String key);

    /**
     * 删除缓存
     *
     * @param key 键
     * @return
     */
    long delObject(String key);

    /**
     * 缓存是否存在
     *
     * @param key 键
     * @return
     */
    boolean exists(String key);

    /**
     * 缓存是否存在
     *
     * @param key 键
     * @return
     */
    boolean existsObject(String key);

}

